<!DOCTYPE html>
<html>
<head>
  <meta charset=utf-8>
  <title>Test parsing of grid item shorthands (grid-column, grid-row, grid-area)</title>
  <link rel="author" title="Simon Sapin" href="mailto:simon.sapin@exyr.org">
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
  <link rel='stylesheet' href='/resources/testharness.css'>
</head>
<body>

<script>

// For various specified values of the grid-column and grid-row shorthands,
// test the computed values of the corresponding longhands.
var grid_column_row_test_cases = [
    {
        specified: "3 / 4",
        expected_start: "3",
        expected_end: "4",
    },
    {
        specified: "foo / span bar",
        expected_start: "foo",
        expected_end: "span bar",
    },
    // http://dev.w3.org/csswg/css-grid/#placement-shorthands
    // "When the second value is omitted,
    //  if the first value is a <custom-ident>,
    //  the grid-row-end/grid-column-end longhand
    //  is also set to that <custom-ident>;
    //  otherwise, it is set to auto."
    {
        specified: "foo",
        expected_start: "foo",
        expected_end: "foo",
    },
    {
        specified: "7",
        expected_start: "7",
        expected_end: "auto",
    },
    {
        specified: "foo 7",
        expected_start: "7 foo",
        expected_end: "auto",
    },
    {
        specified: "span foo",
        expected_start: "span foo",
        expected_end: "auto",
    },
    {
        specified: "foo 7 span",
        expected_start: "span 7 foo",
        expected_end: "auto",
    },
    {
        specified: "7 span",
        expected_start: "span 7",
        expected_end: "auto",
    },
];

// For various specified values of the grid-area shorthand,
// test the computed values of the corresponding longhands.
var grid_area_test_cases = [
    {
        specified: "10 / 20 / 30 / 40",
        gridRowStart: "10",
        gridColumnStart: "20",
        gridRowEnd: "30",
        gridColumnEnd: "40",
    },
    {
        specified: "foo / bar / baz",
        gridRowStart: "foo",
        gridColumnStart: "bar",
        gridRowEnd: "baz",
        gridColumnEnd: "bar",
    },
    {
        specified: "foo / span bar / baz",
        gridRowStart: "foo",
        gridColumnStart: "span bar",
        gridRowEnd: "baz",
        gridColumnEnd: "auto",
    },
    {
        specified: "foo / bar",
        gridRowStart: "foo",
        gridColumnStart: "bar",
        gridRowEnd: "foo",
        gridColumnEnd: "bar",
    },
    {
        specified: "foo / 4",
        gridRowStart: "foo",
        gridColumnStart: "4",
        gridRowEnd: "foo",
        gridColumnEnd: "auto",
    },
    {
        specified: "foo",
        gridRowStart: "foo",
        gridColumnStart: "foo",
        gridRowEnd: "foo",
        gridColumnEnd: "foo",
    },
    {
        specified: "7",
        gridRowStart: "7",
        gridColumnStart: "auto",
        gridRowEnd: "auto",
        gridColumnEnd: "auto",
    },
]

grid_column_row_test_cases.forEach(function(test_case) {
    ["Column", "Row"].forEach(function(axis) {
        var shorthand = "grid" + axis;
        var start_longhand = "grid" + axis + "Start";
        var end_longhand = "grid" + axis + "End";
        test(function() {
            var element = document.createElement('div');
            document.body.appendChild(element);
            element.style[shorthand] = test_case.specified;
            var computed = window.getComputedStyle(element);
            assert_equals(computed[start_longhand], test_case.expected_start);
            assert_equals(computed[end_longhand], test_case.expected_end);
        }, "test parsing of '" + shorthand + ": " + test_case.specified + "'");
    });
});

grid_area_test_cases.forEach(function(test_case) {
    test(function() {
        var element = document.createElement('div');
        document.body.appendChild(element);
        element.style.gridArea = test_case.specified;
        var computed = window.getComputedStyle(element);
        [
            "gridRowStart", "gridColumnStart", "gridRowEnd", "gridColumnEnd"
        ].forEach(function(longhand) {
            assert_equals(computed[longhand], test_case[longhand], longhand);
        });
    }, "test parsing of 'grid-area: " + test_case.specified + "'");
});

</script>

</body>
</html>
